﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    long long x[55], y[55], z1[2000], z2[2000];
    int k, i, j, l;
    scanf("%d", &k);
    while (k--) {
        memset(x, 0, sizeof(x));
        memset(y, 0, sizeof(y));
        memset(z1, 0, sizeof(z1));
        memset(z2, 0, sizeof(z2));
        int L, R;
        int a, b, c, d, xl, yl;
        x[0] = x[1] = 1;
        y[0] = y[1] = 1;
        scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &L, &R);
        for (i = 2; i <= 50; i++) {
            x[i] = a * x[i - 1] + b * x[i - 2];
            if (x[i] > R) {
                xl = i;
                break;
            }
        }//如果值已经大于区间的最右段就直接跳出
        for (i = 2; i <= 50; i++) {
            y[i] = c * y[i - 1] + d * y[i - 2];
            if (y[i] > R) {
                yl = i;
                break;
            }
        }//同上
        int zl = 0;
        for (i = 0; i < xl; i++) {
            for (j = 0; j < yl; j++) {
                if ((L <= x[i] + y[j]) && (R >= x[i] + y[j])) {
                    z1[zl++] = x[i] + y[j];
                }
            }
        }//z1数组中只存入在区间内的数
        if (zl == 0) {
            printf("0\n");
        }//z1数组中无任何数就直接输出0
        else {
            int temp;
            for (i = 0; i < zl; i++) {
                for (j = i + 1; j < zl; j++) {
                    if (z1[i] > z1[j]) {
                        temp = z1[i];
                        z1[i] = z1[j];
                        z1[j] = temp;
                    }
                }
            }//将z1数组中的数按大小排好
            z2[0] = z1[0];
            l = 1;
            for (i = 1; i < zl; i++) {
                if (z1[i] != z2[l - 1]) {
                    z2[l++] = z1[i];
                }
            }//将不重复的数存入z2
            int len = 1, max = 1;
            for (i = 1; i < l; i++) {
                if (z2[i] == z2[i - 1] + 1) {
                    len++;
                    if (len > max) max = len;
                }
                else {
                    len = 1;
                }
            }
            printf("%d\n", max);
        }
    }
    return 0;
}

/*题目描述
序列X由线性产生式 xn = axn−1 + bxn−2, x0 = x1 = 1 产生，
序列Y由线性产生式 yn = cyn−1 + dyn−2, y0 = y1 = 1 产生，
集合Z = { x + y∣x∈X,y∈Y }。
现有区间[L, R]，求最长的子区间[l, r], 满足L≤l≤r≤R, ∀z∈[l, r], z∈Z。

输入格式
第一行是一个整数T(1≤T≤1000)，表示样例的个数。 每个样例占一行，为6个整数，a, b, c, d, L, R, 其中1≤a, b, c, d, L, R≤109

输出格式
依次每个样例，输出最长的子区间的长度，为一个整数。 如果不存在这样的区间，输出0。

样例输入
3
1 1 1 1 1 10
1 1 1 1 1 15
1 1 1 1 12 12
样例输出
9
10
0
样例解释
样例中X和Y都是斐波那契数列，所以集合Z = { 2,3,4,5,6,7,8,9,10,11,13,14,15,… }。*/